﻿using System;
using System.Collections.Generic;
using System.Text;
using System.ComponentModel;
using Sinacor.Infra.Common.Exceptions;
using Sinacor.Infra.Service.ExceptionHandling;
using Sinacor.Infra.Service.Validation;
using Sinacor.Infra.Service.Common;
using Sinacor.Servico.Bovespa.Corretagem.BusinessEntity;
using Sinacor.Servico.Bovespa.Corretagem.ResourceAccess;
using Sinacor.Infra.Service.Validation.BusinessRules;

namespace Sinacor.Servico.Bovespa.Corretagem.BusinessLogic
{
    /// <summary>
    /// Faixa Corretagem
    /// </summary>
	public class FaixaCorretagem : BaseBusinessLogic
    {
        #region Constantes
        private const int ERRO_PARAMETRONAOINFORMADO = 109460;
        #endregion
        #region Construtor

        /// <summary>
		/// Construtor PadrÃ£o
		/// </summary>
		public FaixaCorretagem()
		{
			
		}
		#endregion
		#region MÃ©todos
		
		/// <summary>
		/// MÃ©todo AlterarFaixaCorretagem
		/// </summary>
		public void AlterarFaixaCorretagem(Sinacor.Servico.Bovespa.Corretagem.BusinessEntity.FaixaCorretagem entity)
		{

            if( entity != null){

              BusinessRulesValidator validator = new BusinessRulesValidator();

              BusinessRuleValidation.CamposObrigatoriosFaixaCorretagem camposObrigatorios = new BusinessRuleValidation.CamposObrigatoriosFaixaCorretagem();
              camposObrigatorios.EntityToValidate = entity;
              validator.AddValidation("camposObrigatorios", camposObrigatorios);

              BusinessRuleValidation.ValidacaoNegocioFaixaCorretagem negocio = new BusinessRuleValidation.ValidacaoNegocioFaixaCorretagem();
              negocio.EntityToValidate = entity;
              validator.AddValidation("negocio",negocio);

              
              validator.Validate();

              
              new ResourceAccess.FaixaCorretagem().AlterarFaixaCorretagem(entity);

            }
            else
              throw new BusinessException( ERRO_PARAMETRONAOINFORMADO );


		}
		
		/// <summary>
		/// MÃ©todo AlterarFaixasCorretagens
		/// </summary>
		public void AlterarFaixasCorretagens(List<BusinessEntity.FaixaCorretagem> entities)
		{
            if (entities != null)
            {
                foreach (BusinessEntity.FaixaCorretagem faixaCorretagem in entities)
                {
                    this.AlterarFaixaCorretagem(faixaCorretagem);
                }
            }
            else
                throw new BusinessException(ERRO_PARAMETRONAOINFORMADO);
		}
		
		/// <summary>
		/// MÃ©todo ConsultarFaixasCorretagens
		/// </summary>
		public List<BusinessEntity.FaixaCorretagem> ConsultarFaixasCorretagens(BusinessEntity.Parameter.FiltroFaixaCorretagem parameter)
		{
            if( parameter == null)
              throw new BusinessException(ERRO_PARAMETRONAOINFORMADO);

            return new ResourceAccess.FaixaCorretagem().ConsultarFaixasCorretagens(parameter);
		}
		
		/// <summary>
		/// MÃ©todo ExcluirFaixaCorretagem
		/// </summary>
		public void ExcluirFaixaCorretagem(BusinessEntity.Parameter.FiltroFaixaCorretagemChave entity)
		{
            if( entity != null)
            {

              BusinessRulesValidator validator = new BusinessRulesValidator();

              BusinessRuleValidation.ValidacaoExclusaoFaixaCorretagem exclusao = new BusinessRuleValidation.ValidacaoExclusaoFaixaCorretagem();
              exclusao.EntityToValidate = entity;
              validator.AddValidation("exclusao",exclusao);

              validator.Validate();

              new ResourceAccess.FaixaCorretagem().ExcluirFaixaCorretagem(entity);

            }
            else
              throw new BusinessException( ERRO_PARAMETRONAOINFORMADO );


		}
		
		/// <summary>
		/// MÃ©todo ExcluirFaixasCorretagens
		/// </summary>
		public void ExcluirFaixasCorretagens(List<BusinessEntity.Parameter.FiltroFaixaCorretagemChave> entities)
		{
            if (entities != null)
            {
                foreach (BusinessEntity.Parameter.FiltroFaixaCorretagemChave filtroFaixaCorretagem in entities)
                {
                    this.ExcluirFaixaCorretagem(filtroFaixaCorretagem);
                }
            }
            else
                throw new BusinessException(ERRO_PARAMETRONAOINFORMADO);
		}
		
		/// <summary>
		/// MÃ©todo ExecutarTransacoes
		/// </summary>
		public void ExecutarTransacoes(List<BusinessEntity.FaixaCorretagem> inclusoes,List<BusinessEntity.FaixaCorretagem> alteracoes,List<BusinessEntity.Parameter.FiltroFaixaCorretagemChave> exclusoes)
		{
            if(inclusoes != null)
                this.IncluirFaixasCorretagens(inclusoes);

            if(alteracoes != null)
                this.AlterarFaixasCorretagens(alteracoes);

            if(exclusoes != null)
			    this.ExcluirFaixasCorretagens(exclusoes);

		}
		
		/// <summary>
		/// MÃ©todo IncluirFaixaCorretagem
		/// </summary>
		public void IncluirFaixaCorretagem(BusinessEntity.FaixaCorretagem entity)
		{

            if(entity != null)
            {


                BusinessRulesValidator validator = new BusinessRulesValidator();

                BusinessRuleValidation.CamposObrigatoriosFaixaCorretagem camposObrigatorios = new BusinessRuleValidation.CamposObrigatoriosFaixaCorretagem();
                camposObrigatorios.EntityToValidate = entity;
                validator.AddValidation("camposObrigatorios", camposObrigatorios);

                BusinessRuleValidation.ValidacaoNegocioFaixaCorretagem negocio = new BusinessRuleValidation.ValidacaoNegocioFaixaCorretagem();
                negocio.EntityToValidate = entity;
                validator.AddValidation("negocio",negocio);

                BusinessRuleValidation.ValidacaoExistenciaFaixaCorretagem existencia = new BusinessRuleValidation.ValidacaoExistenciaFaixaCorretagem();
                existencia.EntityToValidate = entity;
                validator.AddValidation("existencia",existencia);

          
                validator.Validate();


                new ResourceAccess.FaixaCorretagem().IncluirFaixaCorretagem(entity);

            }
            else
              throw new BusinessException( ERRO_PARAMETRONAOINFORMADO );


		}
		
		/// <summary>
		/// MÃ©todo IncluirFaixasCorretagens
		/// </summary>
		public void IncluirFaixasCorretagens(List<BusinessEntity.FaixaCorretagem> entities)
		{
			

            if( entities != null)
            {
                foreach (BusinessEntity.FaixaCorretagem faixaCorretagem in entities) 
                {
                    this.IncluirFaixaCorretagem(faixaCorretagem);
                }
            }
            else
               throw new BusinessException( ERRO_PARAMETRONAOINFORMADO );

		}
		
		/// <summary>
		/// MÃ©todo ObterFaixaCorretagem
		/// </summary>
		public BusinessEntity.FaixaCorretagem ObterFaixaCorretagem(BusinessEntity.Parameter.FiltroFaixaCorretagemChave parameter)
		{
            if(parameter == null)
              throw new BusinessException(ERRO_PARAMETRONAOINFORMADO);

            SinacorValidation validation = new SinacorValidation();
            validation.Validate<BusinessEntity.Parameter.FiltroFaixaCorretagemChave>(parameter);

            return new ResourceAccess.FaixaCorretagem().ObterFaixaCorretagem(parameter);
		}
		
		/// <summary>
		/// MÃ©todo ObterUltimaFaixaCorretagem
		/// </summary>
		public BusinessEntity.FaixaCorretagem ObterUltimaFaixaCorretagem(BusinessEntity.Parameter.FiltroFaixaCorretagemChave parameter)
		{
            if (parameter != null)
            {

                parameter.NumeroFaixa = new ResourceAccess.FaixaCorretagem().ObterNumeroUltimaFaixa(parameter.DataInicial.Value);
                if (!parameter.NumeroFaixa.HasValue)
                    return null;

                return ObterFaixaCorretagem(parameter);

            }
            else
                throw new BusinessException(ERRO_PARAMETRONAOINFORMADO);

		}
		#endregion
	}
}

